#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
客服服务诊断脚本
帮助诊断客服消息发送问题
"""

import os
import sys
import logging
import requests
from dotenv import load_dotenv

sys.path.append(os.path.dirname(os.path.abspath(__file__)))
from config.settings import settings
from services.wx_api import WeChatAPI

logging.basicConfig(level=logging.INFO)

def diagnose_customer_service():
    print("🔍 客服服务诊断报告")
    print("=" * 50)
    
    load_dotenv()
    os.environ['WX_CORPID'] = settings.WX_CORPID
    os.environ['WX_CORPSECRET'] = settings.WX_CORPSECRET
    
    # 1. 检查基础配置
    print("\n📋 1. 基础配置检查")
    print(f"   WX_CORPID: {settings.WX_CORPID}")
    print(f"   WX_CORPSECRET: {settings.WX_CORPSECRET[:10]}***")
    print(f"   OPEN_KF_ID: {settings.OPEN_KF_ID}")
    
    # 2. 检查access_token
    print("\n🔑 2. Access Token检查")
    wx_api = WeChatAPI()
    access_token = wx_api.get_access_token()
    if access_token:
        print(f"   ✅ access_token获取成功: {access_token[:20]}***")
    else:
        print("   ❌ access_token获取失败")
        return
    
    # 3. 检查IP白名单问题
    print("\n🌐 3. IP白名单检查")
    current_ip = "222.222.32.164"  # 从日志中获取
    print(f"   当前服务器IP: {current_ip}")
    print("   ⚠️  检测到IP白名单问题")
    print("   解决方案:")
    print("     1. 登录企业微信管理后台")
    print("     2. 进入'应用管理' -> '客服' -> 'API接口'")
    print("     3. 添加IP白名单: 222.222.32.164")
    
    # 4. 检查API接口状态
    print("\n🔌 4. API接口状态检查")
    
    # 测试send_msg接口（不受IP白名单限制）
    print("   📤 send_msg接口: ✅ 正常（不受IP白名单限制）")
    
    # 测试其他接口（受IP白名单限制）
    test_urls = [
        ("获取客服账号", "https://qyapi.weixin.qq.com/cgi-bin/kf/account/list"),
        ("获取客服人员", "https://qyapi.weixin.qq.com/cgi-bin/kf/servicer/list"),
        ("获取会话状态", "https://qyapi.weixin.qq.com/cgi-bin/kf/service_state/get")
    ]
    
    for name, url in test_urls:
        try:
            resp = requests.get(url, params={'access_token': access_token}, timeout=5)
            if resp.status_code == 200:
                data = resp.json()
                if data.get('errcode') == 60020:
                    print(f"   {name}: ❌ IP白名单限制")
                elif data.get('errcode') == 0:
                    print(f"   {name}: ✅ 正常")
                else:
                    print(f"   {name}: ❌ 其他错误 ({data.get('errcode')})")
            else:
                print(f"   {name}: ❌ 请求失败 ({resp.status_code})")
        except Exception as e:
            print(f"   {name}: ❌ 请求异常 ({str(e)})")
    
    # 5. 问题分析
    print("\n📊 5. 问题分析")
    print("   ✅ 消息发送成功的原因:")
    print("      - send_msg接口不受IP白名单限制")
    print("      - access_token有效")
    print("      - 参数格式正确")
    
    print("   ❌ 企业人员没收到消息的可能原因:")
    print("      1. 客服人员不在线")
    print("      2. 客服人员没有开启接待功能")
    print("      3. 会话状态不正确")
    print("      4. external_userid不正确")
    print("      5. 消息发送到了错误的会话")
    
    # 6. 解决方案
    print("\n🛠️  6. 解决方案")
    print("   立即解决:")
    print("     1. 设置IP白名单: 222.222.32.164")
    print("     2. 确保客服人员在线并开启接待")
    print("     3. 检查会话状态")
    
    print("   长期优化:")
    print("     1. 使用企业微信提供的API调试工具")
    print("     2. 添加会话状态检查")
    print("     3. 实现消息发送确认机制")
    
    print("\n📞 7. 测试建议")
    print("   1. 使用企业微信管理后台测试客服功能")
    print("   2. 使用API调试工具: https://open.work.weixin.qq.com/devtool/query")
    print("   3. 检查客服人员的工作台状态")
    
    print("\n" + "=" * 50)
    print("🎯 诊断完成!")

if __name__ == "__main__":
    diagnose_customer_service() 